package br.com.nomeempresa.locadora.controller;

import java.io.IOException;
import java.net.URL;
import java.util.List;
import java.util.ResourceBundle;

import br.com.nomeempresa.locadora.app.Principal;
import br.com.nomeempresa.locadora.dao.UsuarioDAO;
import br.com.nomeempresa.locadora.modelo.TabelaUsuario;
import br.com.nomeempresa.locadora.modelo.Usuario;
import javafx.beans.property.IntegerProperty;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.fxml.Initializable;
import javafx.scene.Parent;
import javafx.scene.control.Button;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableView;
import javafx.scene.control.TextField;
import javafx.scene.control.cell.PropertyValueFactory;

public class UsuarioController implements Initializable {

    @FXML
    private TableView<TabelaUsuario> tabelaUsuario;

    @FXML
    private TableColumn clCodigo;

    @FXML
    private TableColumn clNome;

    @FXML
    private TableColumn clLogin;

    @FXML
    private TableColumn clCPF;

    @FXML
    private TableColumn clTelefone;

    @FXML
    private Button btExcluir;

    @FXML
    private TextField txSenha;

    @FXML
    private TextField txCodigo;

    @FXML
    private Button btSalvar;

    @FXML
    private TextField txNome;

    @FXML
    private TextField txCPF;

    @FXML
    private TextField txTelefone;

    @FXML
    private Button btVoltar;

    @FXML
    private Button btLimpar;

    @FXML
    private Button btEditar;

    @FXML
    private TextField txLogin;

    @FXML
    void eventEditar(ActionEvent event) {
    	IntegerProperty cdUsuario = tabelaUsuario.getSelectionModel().getSelectedItem().codigoProperty();
    	
    	UsuarioDAO dao = new UsuarioDAO();
    	Usuario uSalvo = dao.listarPorId(cdUsuario.intValue());
    	txCodigo.setText(String.valueOf(uSalvo.getCodigo()));
    	txNome.setText(uSalvo.getNome());
    	txLogin.setText(uSalvo.getLogin());
    	txSenha.setText(uSalvo.getSenha());
    	txCPF.setText(uSalvo.getCpf());
    	txTelefone.setText(uSalvo.getTelefone());
    }

    @FXML
    void eventExcluir(ActionEvent event) {
    	int linhaSelecionada = tabelaUsuario.getSelectionModel().getSelectedIndex();
    	IntegerProperty cdUsuario = tabelaUsuario.getSelectionModel().getSelectedItem().codigoProperty();
    	UsuarioDAO dao = new UsuarioDAO();
    	dao.excluir(cdUsuario.intValue());
    	tabelaUsuario.getItems().remove(linhaSelecionada);
    }

    @FXML
    void eventSalvar(ActionEvent event) {
    	Usuario u = new Usuario();
    	u.setNome(txNome.getText());
    	u.setLogin(txLogin.getText());
    	u.setSenha(txSenha.getText());
    	u.setCpf(txCPF.getText());
    	u.setTelefone(txTelefone.getText());
    	UsuarioDAO dao = new UsuarioDAO();
    	
    	if(!txCodigo.getText().trim().equals("")){
    		u.setCodigo(Integer.parseInt(txCodigo.getText()));
    		dao.editar(u);
    	}else{
    		dao.inserir(u);    		
    	}
		carregarTabela();
		limparDados();
    }

    @FXML
    void eventLimpar(ActionEvent event) {
    	limparDados();
    }
    
    @FXML
    void eventVoltar(ActionEvent event) {
    	try{
    		Parent root = FXMLLoader.load(getClass().getResource("/br/com/nomeempresa/locadora/view/Principal.fxml"));
    		Principal.scene.setRoot(root);
    	}catch(IOException ex){
    		ex.printStackTrace();
    	}
    }
    
	@Override
	public void initialize(URL arg0, ResourceBundle arg1) {
		carregarTabela();
	}

	private void carregarTabela() {
		UsuarioDAO dao = new UsuarioDAO();
		List<Usuario> usuarios = dao.listar();
		ObservableList<TabelaUsuario> dados = FXCollections.observableArrayList();
		
		for(Usuario u: usuarios){
			dados.add(new TabelaUsuario(u));
		}
		
		clCodigo.setCellValueFactory(new PropertyValueFactory("codigo"));
		clNome.setCellValueFactory(new PropertyValueFactory("nome"));
		clLogin.setCellValueFactory(new PropertyValueFactory("login"));
		clCPF.setCellValueFactory(new PropertyValueFactory("cpf"));
		clTelefone.setCellValueFactory(new PropertyValueFactory("telefone"));
		tabelaUsuario.setItems(dados);
	}
	
	public void limparDados() {
    	txCodigo.setText("");
    	txNome.setText("");
    	txLogin.setText("");
    	txSenha.setText("");
    	txCPF.setText("");
    	txTelefone.setText("");
	}
}
